package com.ohos.connect.devicecloud.common.util;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.UUID;

/**
 *  1、密钥是去掉分隔符的UUID，由 32 个 16进制 字符组成
 *  2、encode 加密时将待加密字符串中的每一个字符与密钥的对应位置进行加法运算
 *  3、decode 解密时将待解密字符串中的每一个字符与密钥的对应位置进行减法运算
 *  4、edcode 加密和解密为一体，使用异或操作实现
 *  注意：不论加密还是解密，待操作的字符串长度都不能大于 32
 */
public class CommonStringUtil {

    public static String shiftCharacters(String input) {
        StringBuilder result = new StringBuilder();

        for (char c : input.toCharArray()) {
            char shiftedChar;

            if (Character.isLetter(c)) {
                // 处理字母的循环移位
                char base = Character.isLowerCase(c) ? 'a' : 'A';
                shiftedChar = (char) (((c - base + 5) % 26) + base);
            } else if (Character.isDigit(c)) {
                // 处理数字的循环移位
                shiftedChar = (char) (((c - '0' + 5) % 10) + '0');
            } else {
                // 非字母数字字符不变
                shiftedChar = c;
            }

            result.append(shiftedChar);
        }

        return result.toString();
    }



    // 加密数据
    public static String encode(String str, String key) {
        String sct = "";
        int length = str.length();
        for(int i = 0; i < length; i++) {
            sct += (char)(str.charAt(i) + key.charAt(i));
        }
        return sct;
    }
 
    // 解密数据
    public static String decode(String str, String key) {
        String sct = "";
        int length = str.length();
        for(int i = 0; i < length; i++) {
            sct += (char)(str.charAt(i) - key.charAt(i));
        }
        return sct;
    }
 
    // 加密解密合为一体 异或
    public static String edcode(String str, String key) {
        byte []str_byte = str.getBytes();
        byte []key_byte = key.getBytes();
        for(int i = 0; i < str_byte.length; i++) {
            str_byte[i] = (byte)(str_byte[i] ^ key_byte[i]);
        }
        return new String(str_byte);
    }
 
    // 获取密钥
    public static String getKey() {
        String uuid = UUID.randomUUID().toString();
        return uuid.replace("-", "");
    }
}